import { FusionType } from '../enumeration/definition';

/**
 * 判断文本是否为纯 HTML。
 *
 * @param content - 需要判断的文本内容。
 * @returns 如果文本是纯 HTML，返回 true；否则返回 false。
 */
function isHtml(content: string): boolean {
  // 检测常见的 HTML 标签
  const htmlTags = /<([a-z][a-z0-9]*)\b[^>]*>(.*?)<\/\1>/gi;
  return htmlTags.test(content);
}

/**
 * 判断文本是否为纯 Markdown。
 *
 * @param content - 需要判断的文本内容。
 * @returns 如果文本是纯 Markdown，返回 true；否则返回 false。
 */
function isMarkdown(content: string): boolean {
  // 检测常见的 Markdown 标记
  const markdownPatterns = [
    /^#{1,6}\s/, // 多级标题
    /\*\*|\*\*|\_\_|\_/, // 加粗和斜体
    /\*|\_|\+/, // 无序列表
    /^\d\.\s/, // 有序列表
    /^\d\)\s/, // 有序列表
    /^\[\[(.*?)\]\]/, // 链接
    /^\!\[(.*?)\]\(.*?\)/, // 图片
    /^---/, // 水平线
    /^==/, // 高亮
    /^~~/,// 删除线
  ];

  for (const pattern of markdownPatterns) {
    if (pattern.test(content)) {
      return true;
    }
  }

  return false;
}

/**
 * 判断文本的格式类型。
 *
 * @param content - 需要判断的文本内容。
 * @returns 文本的格式类型，'html'、'markdown' 或 '纯文本'。
 */
export function detectTextFormat(content: string): FusionType {
  const isHtmlContent = isHtml(content);
  const isMarkdownContent = isMarkdown(content);

  if (isHtmlContent && !isMarkdownContent) {
    return FusionType.H5
  } else if (!isHtmlContent && isMarkdownContent) {
    return FusionType.MD
  } else {
    return FusionType.TXT
  }
}

//
// // 示例使用
// const htmlContent = `<h1>Heading 1</h1><p>This is a <strong>bold</strong> text and <em>italic</em> text.</p><ul><li>Item 1</li><li>Item 2</li></ul>`;
// const markdownContent = `# Heading 1\nThis is a **bold** text and *italic* text.\n- Item 1\n- Item 2`;
//
// console.log(isHtml(htmlContent)); // 输出：true
// console.log(isMarkdown(htmlContent)); // 输出：false
//
// console.log(isHtml(markdownContent)); // 输出：false
// console.log(isMarkdown(markdownContent)); // 输出：true